<?php

class AnotationsController extends AppController {

    var $name = 'Anotations';

    function index($date_from = null, $date_to = null) {

        if ($date_from != null) {
            $this->data['Anotation']['date_from'] = date('d/m/Y', strtotime($date_from));
            $this->data['Anotation']['date_to'] = date('d/m/Y', strtotime($date_to));
        }

        $this->Anotation->recursive = 0;

        //si vienen filtros aplicados
        if (!empty($this->data)) {

            $datos = $this->data['Anotation'];
            $filtro = ' 1=1 ';

            if (isset($datos['description']) && trim($datos['description']) != '') {
                $filtro .= ' AND Anotation.description like "%' . $datos['description'] . '%"';
            }
            if (isset($datos['date_from']) && trim($datos['date_from']) != '') {
                list($d, $m, $a) = explode("/", $datos['date_from']);
                $datos['date_from'] = $a . "-" . $m . "-" . $d . ' 00:00:00';

                $filtro .= ' AND Anotation.start_date >= "' . $datos['date_from'] . '"';
            }
            if (isset($datos['date_to']) && trim($datos['date_to']) != '') {
                list($d, $m, $a) = explode("/", $datos['date_to']);
                $datos['date_to'] = $a . "-" . $m . "-" . $d . ' 23:59:59';

                $filtro .= ' AND Anotation.finish_date <= "' . $datos['date_to'] . '"';
            }

            $this->paginate['order'] = array('Anotation.start_date' => 'ASC', 'Anotation.finish_date' => 'ASC', 'Anotation.description' => 'ASC');
            $resultados = $this->paginate('Anotation', array($filtro));

            $this->set('anotations', $resultados);

            //guardo el filtro usado en session para despues recordarlo con el paginate
            $restricciones = array('filter' => $filtro, 'order' => $this->paginate['order']);
            $this->Session->write('search_conditions_anotations', $restricciones);
        } elseif ($this->Session->check('search_conditions_anotations')) {

            //si habia algun filtro guardado en session lo tengo que tomar y seguir aplicando el mismo
            //si estoy paginando
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                $restricciones = $this->Session->read('search_conditions_anotations');

                //si esta acomodando por algun campo en particular
                if (isset($this->params['named']['sort'])) {
                    $this->paginate['order'] = array($this->params['named']['sort'] => $this->params['named']['sort']['direction']);
                } else {
                    //sino sigo aplicando el mismo que ya venia
                    $this->paginate['order'] = $restricciones['order'];
                }
                //si hay que seguir el filtro de empleados
                $resultados = $this->paginate('Anotation', array($restricciones['filter']));

                $this->set('anotations', $resultados);
            } else {
                //lo borro de la session
                $filtro = ' 1=1 ';
                $this->Session->delete('search_conditions_anotations');
                $this->paginate['order'] = array('Anotation.start_date' => 'ASC', 'Anotation.finish_date' => 'ASC', 'Anotation.description' => 'ASC');
                $resultados = $this->paginate('Anotation', array($filtro));
                $this->set('anotations', $resultados);
            }
        } else {

            //le pongo un filtro por default
            $filtro = ' 1=1 ';
            $this->paginate['order'] = array('Anotation.start_date' => 'ASC', 'Anotation.finish_date' => 'ASC', 'Anotation.description' => 'ASC');
            $resultados = $this->paginate('Anotation', array($filtro));
            $this->set('anotations', $resultados);
        }
    }

    function add() {
        if (!empty($this->data)) {
            $array_datos = $this->data;

            if (strlen($array_datos['Anotation']['start_hour']) == 1) {
                $array_datos['Anotation']['start_hour'] = '0' . $array_datos['Anotation']['start_hour'];
            }
            if (strlen($array_datos['Anotation']['finish_hour']) == 1) {
                $array_datos['Anotation']['finish_hour'] = '0' . $array_datos['Anotation']['finish_hour'];
            }

            list($d, $m, $a) = explode("/", $array_datos['Anotation']['date_from']);
            $fecha_inicio = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Anotation']['start_hour'] . ':' . $array_datos['Anotation']['start_minute'] . ':00';
            $array_datos['Anotation']['start_date'] = $fecha_inicio;

            $fecha_fin = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Anotation']['finish_hour'] . ':' . $array_datos['Anotation']['finish_minute'] . ':00';
            $array_datos['Anotation']['finish_date'] = $fecha_fin;

            $this->Anotation->create();
            if ($this->Anotation->save($array_datos)) {
                $this->Session->setFlash(__('La anotación ha sido guardada', true));
                if (isset($array_datos['Anotation']['redirigir'])) {
                    $this->redirect(array('action' => 'index'));
                }
            } else {
                $this->Session->setFlash(__('La anotación no ha sido guardada. Por favor, intente nuevamente.', true));
            }
            if (!isset($array_datos['Anotation']['redirigir'])) {
                $this->redirect($this->referer());
            }
        }

        //armo el array con las horas
        $hours = array();
        for ($i = 8; $i <= 23; $i++) {
            if ($i < 10) {
                $value = '0' . $i;
            } else {
                $value = '' . $i;
            }
            $hours[$i] = $value;
        }
        $this->set(compact('hours'));

        //armo el array con los minutos
        $minutes = array(0 => '00', 30 => '30');
        $this->set(compact('minutes'));
    }

    /**
     * Función que busca la anotación y con su fecha, setea los datos para cargar un nuevo job
     * @param <type> $id
     */
    function create($id) {

        $anotation = $this->Anotation->read(null, $id);
        $this->Session->write('anotation_description', $anotation['Anotation']['description']);
        $this->Session->write('anotation_id', $anotation['Anotation']['id']);

        $this->redirect(array('controller' => 'jobs', 'action' => 'add', strtotime($anotation['Anotation']['start_date']), strtotime($anotation['Anotation']['finish_date'])));
    }

    function edit($id = null) {


        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Anotación invalida', true));
            $this->redirect($this->referer());
        }
        if (!empty($this->data)) {

            $array_datos = $this->data;

            list($d, $m, $a) = explode("/", $array_datos['Anotation']['date_from']);
            $fecha_inicio = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Anotation']['start_hour'] . ':' . $array_datos['Anotation']['start_minute'] . ':00';
            $array_datos['Job']['start_date'] = $fecha_inicio;

            $fecha_fin = $a . "-" . $m . "-" . $d . ' ' . $array_datos['Anotation']['finish_hour'] . ':' . $array_datos['Anotation']['finish_minute'] . ':00';
            $array_datos['Anotation']['finish_date'] = $fecha_fin;

            if ($this->Anotation->save($array_datos)) {
                $this->Session->setFlash(__('La anotación ha sido guardada.', true));
                $this->redirect($this->referer());
            } else {
                $this->Session->setFlash(__('La anotación no ha sido guardada. Por favor, intente nuevamente.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->Anotation->read(null, $id);

            //acomodo las fechas
            $this->data['Anotation']['date_from'] = date('d/m/Y', strtotime($this->data['Anotation']['start_date']));
            $this->data['Anotation']['start_hour'] = date('H', strtotime($this->data['Anotation']['start_date']));
            $this->data['Anotation']['start_minute'] = date('i', strtotime($this->data['Anotation']['start_date']));
            $this->data['Anotation']['finish_hour'] = date('H', strtotime($this->data['Anotation']['finish_date']));
            $this->data['Anotation']['finish_minute'] = date('i', strtotime($this->data['Anotation']['finish_date']));
        }

        //armo el array con las horas
        $hours = array();
        for ($i = 8; $i <= 23; $i++) {
            if ($i < 10) {
                $value = '0' . $i;
            } else {
                $value = '' . $i;
            }
            $hours[$i] = $value;
        }
        $this->set(compact('hours'));

        //armo el array con los minutos
        $minutes = array(0 => '00', 30 => '30');
        $this->set(compact('minutes'));
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Anotación Inexistente', true));
            $this->redirect(array('action' => 'index'));
        }
        $this->set('anotation', $this->Anotation->read(null, $id));
    }

    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Anotación Inexistente', true));
            $this->redirect($this->referer());
        }

        if (substr($this->referer(), 0, 9) == '/jobs/add') {
            list($nada, $controller, $action, $star_date, $finish_date) = explode('/', $this->referer());
            $redirect = array('controller' => 'futures', 'action' => 'por_dia', $star_date);
        } else {
            $redirect = $this->referer();
        }

        if ($this->Anotation->delete($id)) {
            $this->Session->setFlash(__('La anotación ha sido eliminada', true));
            $this->redirect($redirect);
        }
        $this->Session->setFlash(__('La anotación no ha sido eliminada. Por favor, intente nuevamente.', true));
        $this->redirect($this->referer());
    }

}